const API_LIST = ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'openLocation', 'previewImage', 'chooseWXPay', 'scanQRCode']

const state = {
  wxConfig: null
}

const mutations = {
  SET_WX_CONFIG(state, config){
    state.wxConfig = config
  }
}

const actions = {
  setWxConfig({ commit }, config){
    commit('SET_WX_CONFIG', config)
  },
  /**
   * 注册jssdk
   */
  wxRegister({ state }, payload){
    let callback = payload.callback,
        config
    // 若没有提供config，则默认使用初始化时获取的config
    if(payload.config && typeof payload.config === 'object'){
      config = payload.config
    } else {
      config = state.wxConfig
    }
    let { appId, timestamp, nonceStr, signature } = config
    //wx全局变量已全局注入
    wx.config({
      debug: false,
      // debug: (process.env.NODE_ENV !== 'production'),
      appId,
      timestamp,
      nonceStr,
      signature,
      jsApiList: API_LIST
    })
    wx.ready(() => {
      console.log('wx.ready');
      if(!!callback && typeof callback === 'function'){
        callback()
      }
    })
    wx.error(res => {
      console.log('wx.error: ',res);
    })
  },
  /**
   * 调用分享接口
   */
  wxShare({ state }, { title, link, imgUrl, desc }){
    wx.onMenuShareTimeline({
        title, // 分享标题
        link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl, // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    })

    wx.onMenuShareAppMessage({
        title, // 分享标题
        desc, // 分享描述
        link, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl, // 分享图标
        type: 'link', // 分享类型,music、video或link，不填默认为link
        dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    })

    wx.onMenuShareQQ({
        title, // 分享标题
        desc, // 分享描述
        link, // 分享链接
        imgUrl, // 分享图标
        success: function () {
           // 用户确认分享后执行的回调函数
        },
        cancel: function () {
           // 用户取消分享后执行的回调函数
        }
    });
  },
  /**
   * 调用地址接口
   */
  wxLocation(context, { latitude, longitude, name }){
    console.log(latitude, longitude);
    latitude = parseFloat(latitude)
    longitude = parseFloat(longitude)
    wx.openLocation({
      latitude,
      longitude,
      name,
      // address: '场地地址',
      scale: 28,
    })
  },
  /**
   * 调用图片预览接口
   */
   wxPreviewImg(context, { current, urls }){
     wx.previewImage({
       current, // 当前显示图片的http链接
       urls // 需要预览的图片http链接列表
     })
   },
   /**
    * 调用微信支付接口
    */
   wxPay(context, { timestamp, nonceStr, _package, signType, paySign, callback }){
     wx.chooseWXPay({
          timestamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
          nonceStr, // 支付签名随机串，不长于 32 位
          package: _package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***）
          signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
          paySign, // 支付签名
          success: function (res) {
            if(!!callback && typeof callback === 'function'){
              callback()
            }
          }
      })
   },
   /**
    * 调用扫码接口
    */
   wxScanCode(context, callback){
     wx.scanQRCode({
        needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
        scanType: ["qrCode"], // 可以指定扫二维码还是一维码，默认二者都有
        success(res){// 当needResult 为 1 时，扫码返回的结果
          if(!!callback && typeof callback === 'function'){
            callback(res.resultStr)
          }
        }
    });
   }
}

export default {
  state,
  mutations,
  actions
}
